package com.fmm.easy;

import java.util.ArrayList;
import java.util.List;

public class YangHuiTriangle {

    /**
     * @param numRows 杨辉三角的层数
     * @return 杨辉三角
     * */
    public static List<List<Integer>> generate(int numRows) {
        // 初始化第一层数组，长度为 numRows
        int[][] result = new int[numRows][];
        // 循环每一层
        for (int i = 1; i <= numRows; i++) {
            // 初始化第二层数组，长度为每一层元素的个数，元素个数与层数相同
            result[i - 1] = new int[i];
            // 每一层首尾两个元素一定是 1
            result[i - 1][0] = result[i - 1][i - 1] = 1;
            // 从第三层开始，除了首尾 2 个元素，中间的元素需要从上一层相加得到
            if (i >= 3) {
                for (int j = 2; j <= i - 1; j++) {
                    result[i - 1][j - 1] = result[i - 2][j - 2] + result[i - 2][j - 1];
                }
            }
        }
        return transferToList(result);
    }

    private static List<List<Integer>> transferToList(int[][] result) {
        List<List<Integer>> list = new ArrayList<>();
        for (int i = 0; i < result.length; i++) {
            List<Integer> temp = new ArrayList<>();
            for (int j = 0; j < result[i].length; j++) {
                temp.add(result[i][j]);
            }
            list.add(temp);
        }
        return list;
    }
}
